<!DOCTYPE html>
<html lang="en">
<head>
    <title>囧么肥事</title>
    <meta charset="UTF-8"/>
    <meta name="viewport"
          content="width=device-width,height=device-height,initial-scale=1.0,maximum-scale=1.0,user-scalable=0"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Content-Type" content="text/html;"/>
    <meta name="renderer" content="webkit">
    <!--解决页面加载网络图片的403问题 , 可以让img标签预加载网络图片-->
    <meta name="referrer" content="no-referrer" />

    <!--markdown S -->
    <link rel="stylesheet" type="text/css" href="../../static/css/export_setting_css.css"/>
    <link rel="stylesheet" type="text/css" href="../../static/css/markdown_preview_css.css"/>
    <!--markdown E -->

    <!--left bar tools css E-->
    <link rel="stylesheet" type="text/css" href="../../static/css/nav.css">
    <link rel="stylesheet" type="text/css" href="http://www.jq22.com/jquery/font-awesome.4.6.0.css">
    <!--left bar tools css E-->

    <!-- 滚动条 S -->
    <link rel="stylesheet" href="../../static/css/optiscroll.css">
    <!-- 滚动条 E -->
</head>
<body>
<div id="m-wrapper" class="m-wrapper optiscroll">
    <!-- top 锚点 -->
    <a id="top"></a>

    <!-- left bar tools S -->
    <div class="leftNav-item">
        <ul>
            <li>
                <i class="fa fa-location-arrow"></i>
                <a href="http://jiongmefeishi.gitee.io/monster-blog/" target="_blank" class="rota">个人网站</a>
            </li>

            <li title="Git">
                <i class="fa fa-code-fork" aria-hidden="true"></i>
                <a href="http://jiongmefeishi.gitee.io/monster-blog/" target="_blank" class="rota">Git Page</a>
            </li>

            <li lay-data="img" data-fooc="http://resource.zqtaotao.cn/wx/qrcode/jiongmefeishi.jpg">
                <i class="fa fa-comments-o"></i><a href="javascript:;" class="rota">公众号</a>
            </li>

            <li lay-data="img" data-fooc="http://resource.zqtaotao.cn/weixincode.png">
                <i class="fa fa-money"></i><a href="javascript:;" class="rota">小额打赏</a>
            </li>
            <li title="返回顶部" class="for-top">
                <i class="fa fa-arrow-up"></i>
                <a href="#top" class="rota">去顶部</a>
            </li>
        </ul>
    </div>
    <!-- left bar tools E -->

    <!--content S-->
    <div id="export_content"><div class="output_wrapper" id="output_wrapper_id"><h3 id="hk8spod"><span>k8s生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？</span></h3>
        <p><strong>k8s考点灵魂拷问9连击之5</strong></p>
        <pre><code class="hljs">考点之简单描述一下k8s副本集ReplicaSet有什么作用？<br></code></pre>
        <pre><code class="hljs">考点之为什么ReplicaSet将取代ReplicationController控制器？<br></code></pre>
        <pre><code class="hljs">考点之编写&nbsp;ReplicaSet&nbsp;的&nbsp;spec&nbsp;有什么需要注意的点？<br></code></pre>
        <pre><code class="hljs">考点之k8s集群中创建非模板&nbsp;Pod&nbsp;为什么可能会被副本集自动收纳？<br></code></pre>
        <pre><code class="hljs">考点之线上预警k8s集群循环创建、删除Pod副本，一直无法稳定指定目标副本数量?<br><br>如果排除了是Pod内部发生了故障，从RS角度你猜测可能是什么原因？<br></code></pre>
        <p><strong>上一期，讨论了前面五个考点，感兴趣去可以</strong><a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484188&amp;idx=1&amp;sn=b8b06c4abe2f5d56556235f867ec10d0&amp;chksm=cf31eacaf84663dc0dd330e4b5d183c06a2c92f8a0e42c8c76b30d67e1ba90381f5bc7c5f780&amp;scene=21#wechat_redirect">看一看【点我进入传送门】</a>，好了，接下来继续看本期4个考点!</p>
        <pre><code class="hljs">考点之标签Pod和可识别标签副本集ReplicaSet&nbsp;先后创建顺序不同，会造成什么影响？<br></code></pre>
        <pre><code class="hljs">考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？<br></code></pre>
        <pre><code class="hljs">考点之缩放&nbsp;RepliaSet&nbsp;有哪些算法策略？<br></code></pre>
        <pre><code class="hljs">考点之如何去影响淘汰策略，设置单独偏好？<br></code></pre>
        <h3 id="h"><span>囧么肥事-胡说八道</span></h3>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/d79b0525667d64b15d559fc8e573c522.png" alt="img" title="img"><figcaption>img</figcaption></figure>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/36471271afac7eef6458c896e0fe9ded.png" alt="img" title="img"><figcaption>img</figcaption></figure>
        <h3 id="hpodreplicaset"><span>考点之标签Pod和可识别标签副本集ReplicaSet 先后创建顺序不同，会造成什么影响？</span></h3>
        <p>假设给Pod打上的标签是 AA，同时RS标签选择器设置匹配 AA。</p>
        <p>分为两种情况</p>
        <pre><code class="hljs shell"><span class="hljs-meta">#</span><span class="bash"><span class="hljs-comment">##&nbsp;预设RS标签和副本数量</span></span><br>RS-AA&nbsp;标签选择器可识别&nbsp;AA&nbsp;标签<br>设置副本15个<br><span class="hljs-meta"><br>#</span><span class="bash"><span class="hljs-comment">##&nbsp;预设Pod标签</span></span><br>裸Pod-AA&nbsp;标志标签&nbsp;AA<br></code></pre>
        <p><strong>第一种：RS已经创建，裸Pod随后创建</strong></p>
        <pre><code class="hljs">情况一：<br>&nbsp;&nbsp;&nbsp;&nbsp;副本等于15个，此时创建&nbsp;Pod-AA<br>结果：<br>&nbsp;&nbsp;&nbsp;&nbsp;新的&nbsp;裸Pod-AA&nbsp;会被该&nbsp;RS-AA&nbsp;识别<br>&nbsp;&nbsp;&nbsp;&nbsp;副本数&nbsp;&gt;&nbsp;15，开启平衡机制<br>&nbsp;&nbsp;&nbsp;&nbsp;新Pod立即被&nbsp;RS&nbsp;终止并实行删除操作<br><br><br>情况二：<br>&nbsp;&nbsp;&nbsp;&nbsp;副本小于15个，此时创建&nbsp;Pod-AA<br>结果：<br>&nbsp;&nbsp;&nbsp;&nbsp;裸Pod-AA&nbsp;创建后立即被&nbsp;RS-AA识别<br>&nbsp;&nbsp;&nbsp;&nbsp;副本数&nbsp;&lt;=&nbsp;15，开启平衡机制，收管裸Pod<br></code></pre>
        <p>第二种：裸Pod先创建，随后创建RS</p>
        <pre><code class="hljs xml">情况一：<br>&nbsp;&nbsp;&nbsp;&nbsp;创建了小于等与15个裸Pod-AA，此时创建&nbsp;RS-AA<br>结果：<br>&nbsp;&nbsp;&nbsp;&nbsp;RS-AA&nbsp;创建成功后<br>&nbsp;&nbsp;&nbsp;&nbsp;发现存在有AA标签的Pod<br>&nbsp;&nbsp;&nbsp;&nbsp;将所有的Pod-AA纳入自己管辖范围<br>&nbsp;&nbsp;&nbsp;&nbsp;副本数&nbsp;<span class="hljs-tag">&lt;&nbsp;<span class="hljs-attr">15</span>，开启平衡机制<br>&nbsp;&nbsp;&nbsp;&nbsp;由<span class="hljs-attr">RS-AA</span>继续创建剩余<span class="hljs-attr">Pod-AA</span>补充够<span class="hljs-attr">15</span>个<br><br><br>情况二：<br>&nbsp;&nbsp;&nbsp;&nbsp;创建了大于<span class="hljs-attr">15</span>个裸<span class="hljs-attr">Pod-AA</span>，此时创建&nbsp;<span class="hljs-attr">RS-AA</span><br>结果：<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="hljs-attr">RS-AA</span>&nbsp;创建成功后<br>&nbsp;&nbsp;&nbsp;&nbsp;发现存在有<span class="hljs-attr">AA</span>标签的<span class="hljs-attr">Pod</span><br>&nbsp;&nbsp;&nbsp;&nbsp;将所有的<span class="hljs-attr">Pod-AA</span>纳入自己管辖范围<br>&nbsp;&nbsp;&nbsp;&nbsp;副本数&nbsp;&gt;</span>&nbsp;15，开启平衡机制<br>&nbsp;&nbsp;&nbsp;&nbsp;RS-AA实行删除多余Pod操作<br>&nbsp;&nbsp;&nbsp;&nbsp;直到副本数维持在15个<br></code></pre>
        <p>结论：无论RS何时创建，一旦创建，会将自己标签选择器能识别到的所有Pod纳入麾下，接管生存权，遵循RS规约定义的有效副本数，去开启平衡机制，维持有效标签Pod的副本数。</p>
        <p>总之，RS<strong>尽力保证</strong>系统当前正在运行的<code>Pod</code>数<strong>等于期望状态</strong>里指定的<code>Pod</code>数目。</p>
        <p>如果想要独立创建可生存的裸Pod，一定要检查所有的RS标签选择器的可识别范围，避免自己创建的裸Pod被收纳接管。</p>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/0b21481d0657e24db32bfe0a9220fe3f.gif" alt="img" title="img"><figcaption>img</figcaption></figure>
        <h3 id="hpod"><span>考点之生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？</span></h3>
        <p>如果线上发现有些Pod没<strong>有按照我们期望的状态</strong>来进行运行，发生了某些故障，但是其他同类型Pod却没有发生。</p>
        <p>这种故障<strong>一般属于不易复现的故障</strong>，只会在某些偶然性的条件下触发故障，但是这个触发条件我们又不清楚，所以我们要专门针对这个故障进行问题排查。</p>
        <p>这个时候又<strong>不希望在排查过程中影响服务的正常响应</strong>，那该怎么办呢？</p>
        <p><strong>隔离法</strong>，所谓隔离法，就是将 Pod 从 ReplicaSet 集合中隔离出来，让Pod脱离RS的管控范围，额有点类似赎身。</p>
        <p>可以通过改变标签来从 ReplicaSet 的目标集中移除 Pod。 </p>
        <p>这种技术可以用来从服务中<strong>去除 Pod</strong>，以便进行排错、数据恢复等。 </p>
        <p>以这种方式移除的 Pod 将被<strong>自动替换</strong>（假设副本的数量没有改变）。</p>
        <p>通过隔离这个目标Pod，RS会自动补充副本Pod去保证集群的高可用，我们不必担心影响到服务线的正常响应。这时候就可以针对这个目标Pod做排查，研究，里里外外的想干啥，就干啥，嘿嘿😋。</p>
        <pre><code class="hljs r">班级（标签<span class="hljs-number">666</span>班）<br>老师（RS-<span class="hljs-number">666</span>）<br>学生<span class="hljs-number">15</span>个（学生证标签<span class="hljs-number">666</span>班）<br>-----------------------------<br><br>每天上课，老师都检查学生证入班<br>学生<span class="hljs-number">1</span>号：学生证-<span class="hljs-number">666</span>班，进去<br>学生<span class="hljs-number">2</span>号：学生证-<span class="hljs-number">666</span>班，进去<br><span class="hljs-keyword">...</span><br>学生<span class="hljs-number">20</span>号：学生证-<span class="hljs-number">666</span>班，进去<br><br><br>某天，学生<span class="hljs-number">9</span>号的学生证被人改了<span class="hljs-number">999</span>班<br>学生<span class="hljs-number">1</span>号：学生证-<span class="hljs-number">666</span>班，进去<br>学生<span class="hljs-number">2</span>号：学生证-<span class="hljs-number">666</span>班，进去<br><span class="hljs-keyword">...</span><br>学生<span class="hljs-number">9</span>号：学生证-<span class="hljs-number">999</span>班，老师拦住了<span class="hljs-number">9</span>号，不许进<br><span class="hljs-keyword">...</span><br>学生<span class="hljs-number">20</span>号：学生证-<span class="hljs-number">666</span>班，进去<br></code></pre>
        <p>这个老师跟RS一样，很偏激，只认学生证（RS只认标签），不认人。如果改了标签，就认不出了，自己也不会再去接管了。</p>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/f6d584ac691e1d4aaf99c227db8b3217.gif" alt="img" title="img"><figcaption>img</figcaption></figure>
        <h3 id="hrepliaset"><span>考点之缩放 RepliaSet 有哪些算法策略？</span></h3>
        <p>通过更新 <code>.spec.replicas</code> 字段，指定目标Pod副本数量，ReplicaSet 可以很轻松的实现缩放。</p>
        <p>而且，ReplicaSet 控制器能确保经过缩放完成留下来的Pod数量不仅<strong>符合要求副本数量</strong>，而且Pod是可用，可操作的。</p>
        <p>RS扩容不必说，肯定创建新的Pod副本，纳入管理。</p>
        <p>至于缩容，降低集合规模时ReplicaSet 控制器会对所有可用的Pods <strong>进行一次权重排序</strong>，剔除最不利于系统高可用，稳健运行的Pod。</p>
        <p>其一般性算法如下：</p>
        <ol>
            <li>首先优先选择剔除<strong>阻塞（Pending）且不可调度</strong>的 Pods。</li>
            <li>如果设置了 <code>controller.kubernetes.io/pod-deletion-cost</code> 注解，则注解值较小的优先被剔除。</li>
            <li><strong>所处节点</strong>上副本个数较多的 Pod <strong>优先于所处节点上副本较少者</strong>被剔除。</li>
            <li>如果 <strong>Pod 的创建时间不同</strong>，<strong>最近创建的 Pod 优先于早前创建的 Pod 被剔除</strong>。 </li>
        </ol>
        <p>如果以上<strong>比较结果都相同</strong>，则<strong>随机剔除</strong>。</p>
        <h3 id="h-1"><span>考点之如何去影响淘汰策略，设置单独偏好？</span></h3>
        <p>前说了，RS在进行缩容操作时，有自己的一套<strong>淘汰策略</strong>。<strong>根据四种淘汰策略进行权重排序</strong>，去剔除RS认为<strong>不利于系统稳健运行</strong>的Pod。</p>
        <p>同一应用的不同 Pods 可能其<strong>利用率是不同的</strong>。在对应用执行缩容操作时，可能希望移除利用率较低的 Pods。</p>
        <p><strong>那么我们怎么做，才能去影响到RS的淘汰机制，保留我们自己认为需要保留的Pod呢？</strong></p>
        <p>前面提到了<code>controller.kubernetes.io/pod-deletion-cost</code> 注解值较小的Pod会优先被剔除。</p>
        <p>我们可以通过这个注解去影响RS淘汰机制，设置个人保留偏好。</p>
        <p><strong>那么什么是<code>controller.kubernetes.io/pod-deletion-cost</code> 注解？</strong></p>
        <p>此注解设置到 Pod 上，取值范围为 <code>[-2147483647, 2147483647]</code>，如果注解值非法，API 服务器会拒绝对应的 Pod。</p>
        <p>表示从RS中删除Pod所需要花费的开销。</p>
        <p>RS认为<strong>删除开销较小的 Pods 比删除开销较高的 Pods 更容易被删除</strong>，更有利于系统的稳健运行。</p>
        <p>不过此机制实施仅是尽力而为，并不能保证一定会影响 Pod 的删除顺序。只能说是爱妃给皇上吹枕边风，真正做出决定的还是皇上。</p>
        <p><strong>注意：</strong></p>
        <pre><code class="hljs">此功能特性处于&nbsp;Beta&nbsp;阶段，默认被禁用。<br>通过为&nbsp;kube-apiserver&nbsp;和&nbsp;kube-controller-manager&nbsp;设置特性门控&nbsp;PodDeletionCost&nbsp;开启功能。<br></code></pre>
        <figure><img src="https://img-blog.csdnimg.cn/img_convert/b8413bf646495a4754fc98c8b1f9b01a.gif" alt="img" title="img"><figcaption>img</figcaption></figure>
        <hr>
        <p><strong>《Kubernetes-企业级容器应用托管》-持续胡说八道</strong></p>
        <p>第一段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484066&amp;idx=1&amp;sn=441fcae466eb5b5fba2fa29f007d7c07&amp;chksm=cf31eb74f8466262ccc258fe1d21fbd8d65e73221c211b704d216d5116a15ffcc4f4cacf5b31#rd">【云原生新时代弄潮儿k8s凭什么在容器化方面独树一帜？】</a></p>
        <p>第二段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484077&amp;idx=1&amp;sn=2ba024c0e121f7ac83e7264bdf7b4dff&amp;chksm=cf31eb7bf846626d02c59837a2f903ed848d8e0f117c80af16b364e858005c57849f0bb82e47#rd">【趁着同事玩游戏偷偷认识k8s一家子补补课】</a></p>
        <p>第三段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484110&amp;idx=1&amp;sn=cae2e84fb16b9fe5d8a7727c20009b3b&amp;chksm=cf31eb18f846620e3dd1b7b8b9008fd5960363bc6bd3de679225ea5e45f9a48e93d210ccd572#rd">【Kubernetes家族容器小管家Pod在线答疑❓】</a></p>
        <p>第四段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484122&amp;idx=1&amp;sn=4f913c1e30808622e80a386aa6b4bef8&amp;chksm=cf31eb0cf846621a4cf5ba605ec6fe4141b244dd2b8c49311accba15909f426277d643b6aceb#rd">【同事提出个我从未想过的问题，为什么Kubernetes要"多此一举"推出静态Pod概念？】</a></p>
        <p>第五段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484133&amp;idx=1&amp;sn=116c23255e688ca1b86197689bcc8b72&amp;chksm=cf31eb33f8466225400e6bfaac74d5d26de91b85e8f475ecbebedfb8ae08ebd9dde91aec1177#rd">【探针配置失误，线上容器应用异常死锁后，kubernetes集群未及时响应自愈重启容器？】</a></p>
        <p>第六段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484143&amp;idx=1&amp;sn=5e764d67105c34bbaa4c851482dbe5cc&amp;chksm=cf31eb39f846622f8c0aa21afd5d33d3928073de71058d59f974c5498bf84da2681cf76582a8#rd">【kubernetes集群之Pod说能不能让我体面的消亡呀？】</a></p>
        <p>第七段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484153&amp;idx=1&amp;sn=2d6f43036cf2e4cea5fa2aebc4b67ebf&amp;chksm=cf31eb2ff846623904c34e84943576ccf1714d73e042bdc9a4ce584050caf3fc0a85ff5c8908#rd">【k8s家族Pod辅助小能手Init容器认知答疑？】</a></p>
        <p>第八段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484188&amp;idx=1&amp;sn=b8b06c4abe2f5d56556235f867ec10d0&amp;chksm=cf31eacaf84663dc0dd330e4b5d183c06a2c92f8a0e42c8c76b30d67e1ba90381f5bc7c5f780#rd">【k8s初面考点ReplicaSet副本集极限9连击你懂了吗？】</a></p>
        <p>第九段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484206&amp;idx=1&amp;sn=631183744568cd7756cb3d747595c479&amp;chksm=cf31eaf8f84663eed04cfdd2c04dd8f1522a3c5bf43cbf4a24dd2e3a335fc4189f1269627e8f#rd">【生产环境想要对某个Pod排错、数据恢复、故障复盘有什么办法？】</a></p>
        <p>第十段：推荐阅读：<a href="https://mp.weixin.qq.com/s?__biz=Mzg3NjU0NDE4NQ==&amp;mid=2247484214&amp;idx=1&amp;sn=7a0a593abbcd34347351bcc3ecd6785a&amp;chksm=cf31eae0f84663f61600e14108ebd7b0db326d26d1f78ca7686e685c4de4728af80b54de3b4c#rd">【跟k8s工作负载Deployments的缘起缘灭】</a></p>
        <p>后续未更新？推荐休闲阅读：<a href="https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg3NjU0NDE4NQ==&amp;action=getalbum&amp;album_id=2218140423993212933#wechat_redirect">【囧么肥事】</a></p></div></div>
    <!--content E-->
</div>



</body>
<!--left bar tools js S-->
<script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../../static/js/nav.js"></script>
<!--left bar tools js E-->

<!-- 滚动条 S -->
<script type="text/javascript" src="../../static/js/optiscroll.js"></script>
<!-- 滚动条 E -->

<!--commonjs S-->
<script type="text/javascript" src="../../static/js/common.js"></script>
<!--commonjs E-->

</html>
